﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Modelo;
using System.Data.SqlClient;

namespace BaseDatos
{
    public static class BDProveedor
    {
        private static string conexionCentral = "Data Source=.\\sqlexpress; Initial Catalog=FarmaciaAurora; Integrated Security=true";
        private static string conexionSucursal1 = "Data Source=nelson-hp\\sqlexpress;; Initial Catalog=FarmaciaAuroraSucursal;  User ID=Gerard; Password = Gerard123";
        private static string conexionSucursal2 = "Data Source=.\\sqlexpress; Initial Catalog=FarmaciaAuroraSucursal2; Integrated Security=true";

        public static bool ModificarProveedor(Proveedor proveedor)
        {
            SqlConnection sql = null;
            bool res = false;
            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Update Proveedor Set Nombre= @nombre, ContratoActivo = @contratoActivo, FechaContrato = @fechaContrato";
                comando.Parameters.AddWithValue("nombre",proveedor.nombre);
                comando.Parameters.AddWithValue("fechaContrato",proveedor.fechaContrato);
                comando.Parameters.AddWithValue("contratoActivo",proveedor.contratoActivo);
                sql.Open();
                comando.ExecuteNonQuery();
                res = true;
            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return res;
        }
        public static bool elNombreYaExiste(string nombre)
        {
            SqlConnection sql = null;
            bool res = true;
            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "SELECT Nombre from Proveedor where Nombre=@nombre";
                comando.Parameters.AddWithValue("nombre",nombre);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if(!reader.HasRows)
                    res = false;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return res;
        }
        public static Proveedor insertarNuevoProveedor(Proveedor proveedor)
        {
            try
            {
                Proveedor prod1 = insertarNuevoProveedor(proveedor, conexionCentral);
                Proveedor prod2 = insertarNuevoProveedor(proveedor, conexionSucursal1);
                Proveedor prod3 = insertarNuevoProveedor(proveedor, conexionSucursal2);
                if (prod1 == null)
                    throw new Exception("Error al añadir proveedor en la central");
                if (prod2 == null)
                    throw new Exception("Error al añadir proveedor en la sucursal 1");
                if (prod3 == null)
                    throw new Exception("Error al añadir proveedor en la sucursal 2");
                return prod3;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        private static Proveedor insertarNuevoProveedor(Proveedor proveedor,string conexion)
        {
            SqlConnection sql = null;
            
            try
            {
                sql = new SqlConnection(conexion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "INSERT INTO Proveedor (Nombre,ContratoActivo,FechaContrato) VALUES (@nombre,@contrato,@fecha) SELECT SCOPE_IDENTITY() as Num";
                comando.Parameters.AddWithValue("nombre",proveedor.nombre);
                comando.Parameters.AddWithValue("contrato",proveedor.contratoActivo);
                comando.Parameters.AddWithValue("fecha",proveedor.fechaContrato);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.Read())
                {
                    proveedor.idProveedor = long.Parse(reader["num"].ToString());
                    return proveedor;
                }
            }
            catch (Exception e)
            {
                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return null;
        }
        public static List<Proveedor> listaDeProveedores()
        {
            SqlConnection sql = null;
            List<Proveedor> proveedores = null;
            try
            {
                sql = new SqlConnection(conexionCentral);
                proveedores = new List<Proveedor>();
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Select * From Proveedor";
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Proveedor proveedor = new Proveedor();
                    proveedor.contratoActivo = (bool)reader["ContratoActivo"];
                    proveedor.fechaContrato = DateTime.Parse(reader["FechaContrato"].ToString());
                    proveedor.idProveedor = (long)reader["IdProveedor"];
                    proveedor.nombre = reader["Nombre"].ToString();
                    proveedores.Add(proveedor);
                }
            }
            catch (Exception e)
            {

                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return proveedores;
        }
        public static Proveedor buscarProveedor(float idProveedor)
        {
            SqlConnection sql = null;
            Proveedor proveedor = null;
            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Select * from Proveedor where IdProveedor=@idProveedor";
                comando.Parameters.AddWithValue("IdProveedor",idProveedor);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.Read())
                {
                    proveedor = new Proveedor();
                    proveedor.contratoActivo = (bool)reader["ContratoActivo"];
                    proveedor.fechaContrato = DateTime.Parse(reader["FechaContrato"].ToString());
                    proveedor.idProveedor = long.Parse(reader["IdProveedor"].ToString());
                    proveedor.nombre = reader["Nombre"].ToString();
                }
            }
            catch (Exception ex)
            {

                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return proveedor;
        }

    }
}
